
#ifndef DECORATORQUESTIONNAIREMODEL_H
#define DECORATORQUESTIONNAIREMODEL_H

#include <QObject>

class QAbstractItemModel;
class ReaderToModel;
class WriterFromModel;
const char Radio = 0;
const char Check = 1;
const char Text = 2;


/** Декоратор модели данных анкеты.
  *
  * Чтобы отделить данные и "бизнес логику" от графического интерфейса
  * пользователя использую паттерн модель/представление.
  * Вместо наследования от QAbstractItemModel реализую специфичные
  * для анкеты действия в декораторе. Это позволит, при необходимости
  * безболезненно заменить одну реализацию модели на другую.
  * @author Василий Почкаенко
  */

class DecoratorQuestionnaireModel : public QObject{
Q_OBJECT
private:
	/** Модель которую расширяем.*/
	QAbstractItemModel *m;

	/** Выделенный вопрос*/
	int q;

	/** Читалка.*/
	ReaderToModel * r;

	/** Писалка.*/
	WriterFromModel * w;
public:
	/** .*/
	explicit DecoratorQuestionnaireModel (QObject *parent = 0);

	/** Модель которую расширяем.*/
	QAbstractItemModel * model() const;
public slots:
	/** Создание нового вопроса.*/
	void addQuestion ( );


	/** Выбор существующего вопроса.*/
	void selectQuestion (int question);


	/** Создание нового ответа.*/
	void addVariant ( );


	/** Сохранить результат.*/
	void save (const QString & fn);


	/** Открыть уже существующую из файла.*/
	void open (const QString & fileName );
signals:
};

#endif // DECORATORQUESTIONNAIREMODEL_H
